package com.xhwy.util;

import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.HashMap;

/**
 * 返回数据的工具类
 */
//@Accessors(chain = true)
public class R extends HashMap<String, Object> implements Serializable {
    private static final long serialVersionUID = 1L;

    //通用成功代码
    private static final String SUCCESS_CODE = "001";
    //失败状态码
    public static final String FAIL_CODE = "004";

    /**
     * 初始化对象
     * 返回默认的code码和消息对象
     */
    public R(){
        put("code", SUCCESS_CODE);
        put("msg", "success");
    }

    /**
     * 返回自定义的状态码和消息对象
     * @param code
     * @param msg
     * @return
     */
    public static R fail(String code, String msg){
        R r = new R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }

    /**
     * 返回code码为004的自定义消息对象
     * @param msg
     * @return
     */
    public static R fail(String msg){
        return fail(FAIL_CODE, msg);
    }

    /**
     * 返回默认错误对象
     * @return
     */
    public static R fail(){
        return fail(FAIL_CODE, "error");
    }

    /**
     * 返回默认成功对象(状态码：001)
     * @return
     */
    public static R ok(){
        return new R();
    }

    /**
     * 自定义状态码和消息的成功对象
     * @param code 状态码
     * @param msg 消息
     * @return
     */
    public static R ok(String code, String msg){
        R r = new R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }

    /**
     * 返回状态码为001和自定义消息的对象
     * @param msg 消息
     * @return
     */
    public static R ok(String msg){
        return ok(SUCCESS_CODE, msg);
    }

    /**
     * 带有数据的自定义消息对象
     * @param msg 消息
     * @param data 数据
     * @return
     */
    public static R ok(String msg, Object data){
        return ok(msg).put("data", data);
    }

    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}
